home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / sctp / auth.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.3 KB  |  128 lines

  1. /* SCTP kernel implementation
  2.  * (C) Copyright 2007 Hewlett-Packard Development Company, L.P.
  3.  *
  4.  * This file is part of the SCTP kernel implementation
  5.  *
  6.  * This SCTP implementation is free software;
  7.  * you can redistribute it and/or modify it under the terms of
  8.  * the GNU General Public License as published by
  9.  * the Free Software Foundation; either version 2, or (at your option)
  10.  * any later version.
  11.  *
  12.  * This SCTP implementation is distributed in the hope that it
  13.  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  14.  *                 ************************
  15.  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  16.  * See the GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with GNU CC; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 59 Temple Place - Suite 330,
  21.  * Boston, MA 02111-1307, USA.
  22.  *
  23.  * Please send any bug reports or fixes you make to the
  24.  * email address(es):
  25.  *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  26.  *
  27.  * Or submit a bug report through the following website:
  28.  *    http://www.sf.net/projects/lksctp
  29.  *
  30.  * Written or modified by:
  31.  *   Vlad Yasevich     <vladislav.yasevich@hp.com>
  32.  *
  33.  * Any bugs reported given to us we will try to fix... any fixes shared will
  34.  * be incorporated into the next SCTP release.
  35.  */
  36.  
  37. #ifndef __sctp_auth_h__
  38. #define __sctp_auth_h__
  39.  
  40. #include <linux/list.h>
  41. #include <linux/crypto.h>
  42.  
  43. struct sctp_endpoint;
  44. struct sctp_association;
  45. struct sctp_authkey;
  46. struct sctp_hmacalgo;
  47.  
  48. /*
  49.  * Define a generic struct that will hold all the info
  50.  * necessary for an HMAC transform
  51.  */
  52. struct sctp_hmac {
  53.     __u16 hmac_id;        /* one of the above ids */
  54.     char *hmac_name;    /* name for loading */
  55.     __u16 hmac_len;        /* length of the signature */
  56. };
  57.  
  58. /* This is generic structure that containst authentication bytes used
  59.  * as keying material.  It's a what is referred to as byte-vector all
  60.  * over SCTP-AUTH
  61.  */
  62. struct sctp_auth_bytes {
  63.     atomic_t refcnt;
  64.     __u32 len;
  65.     __u8  data[];
  66. };
  67.  
  68. /* Definition for a shared key, weather endpoint or association */
  69. struct sctp_shared_key {
  70.     struct list_head key_list;
  71.     __u16 key_id;
  72.     struct sctp_auth_bytes *key;
  73. };
  74.  
  75. #define key_for_each(__key, __list_head) \
  76.     list_for_each_entry(__key, __list_head, key_list)
  77.  
  78. #define key_for_each_safe(__key, __tmp, __list_head) \
  79.     list_for_each_entry_safe(__key, __tmp, __list_head, key_list)
  80.  
  81. static inline void sctp_auth_key_hold(struct sctp_auth_bytes *key)
  82. {
  83.     if (!key)
  84.         return;
  85.  
  86.     atomic_inc(&key->refcnt);
  87. }
  88.  
  89. void sctp_auth_key_put(struct sctp_auth_bytes *key);
  90. struct sctp_shared_key *sctp_auth_shkey_create(__u16 key_id, gfp_t gfp);
  91. void sctp_auth_destroy_keys(struct list_head *keys);
  92. int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp);
  93. struct sctp_shared_key *sctp_auth_get_shkey(
  94.                 const struct sctp_association *asoc,
  95.                 __u16 key_id);
  96. int sctp_auth_asoc_copy_shkeys(const struct sctp_endpoint *ep,
  97.                 struct sctp_association *asoc,
  98.                 gfp_t gfp);
  99. int sctp_auth_init_hmacs(struct sctp_endpoint *ep, gfp_t gfp);
  100. void sctp_auth_destroy_hmacs(struct crypto_hash *auth_hmacs[]);
  101. struct sctp_hmac *sctp_auth_get_hmac(__u16 hmac_id);
  102. struct sctp_hmac *sctp_auth_asoc_get_hmac(const struct sctp_association *asoc);
  103. void sctp_auth_asoc_set_default_hmac(struct sctp_association *asoc,
  104.                      struct sctp_hmac_algo_param *hmacs);
  105. int sctp_auth_asoc_verify_hmac_id(const struct sctp_association *asoc,
  106.                     __be16 hmac_id);
  107. int sctp_auth_send_cid(sctp_cid_t chunk, const struct sctp_association *asoc);
  108. int sctp_auth_recv_cid(sctp_cid_t chunk, const struct sctp_association *asoc);
  109. void sctp_auth_calculate_hmac(const struct sctp_association *asoc,
  110.                 struct sk_buff *skb,
  111.                 struct sctp_auth_chunk *auth, gfp_t gfp);
  112.  
  113. /* API Helpers */
  114. int sctp_auth_ep_add_chunkid(struct sctp_endpoint *ep, __u8 chunk_id);
  115. int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep,
  116.                 struct sctp_hmacalgo *hmacs);
  117. int sctp_auth_set_key(struct sctp_endpoint *ep,
  118.               struct sctp_association *asoc,
  119.               struct sctp_authkey *auth_key);
  120. int sctp_auth_set_active_key(struct sctp_endpoint *ep,
  121.               struct sctp_association *asoc,
  122.               __u16 key_id);
  123. int sctp_auth_del_key_id(struct sctp_endpoint *ep,
  124.               struct sctp_association *asoc,
  125.               __u16 key_id);
  126.  
  127. #endif
  128.